/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux.acts;

// {{{ imports
import jp.ize.ux.Util;
import jp.ize.ux.UXObject;
import jp.ize.ux.UXPoint;
import jp.ize.ux.acts.Act;
// }}}
// {{{ enum LinearActEvent {
enum LinearActEvent {
	/** アクションが開始した事を知らせるイベントです */
	START;
	/** アクションが終了した事を知らせるイベント */
	COMPLETE;   
}
// }}}
// {{{ typedef LinearMovable = {>
/**
 * LinearActが必要な情報です。
 */
typedef LinearMovable = {>
	ListStateType,
	/** 始点 */
	var startp(default, default) : UXPoint;
	/** 終点 */
	var endp(default, default) : UXPoint;
	/** 幅 */
	var width(default, default) : Float;
}
// }}}
// {{{ class WipeParameter extends ActParameter
/**
 * ワイプアクションが必要なパラメーターです。
 */
class WipeParameter extends ActParameter
{
	// {{{ public var center(default, default) : Int
	/**
	 * どの子コンポーネントを中心に集めるかを指定する子コンポーネントのインデックス番号です。
	 */
	public var center(default, default) : Int;
	// }}}
}
// }}}
// {{{ class ShuffleParameter extends ActParameter
/**
 * シャップルアクションが必要なパラメーターです。
 */
class ShuffleParameter extends ActParameter
{
	// {{{ public var  targets : Array<Int>
	/**
	 * シャッフルの対象になる子コンポーネントのインデックス番号の配列です。
	 */
	public var  targets : Array<Int>;
	// }}}
}
// }}}
// {{{ class LinearAct extends ActSubject<LinearActEvent>
/**
 * LinearActクラス<br>
 * 直線上の動きを表現するクラスです。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class LinearAct extends ActSubject<LinearActEvent>
{
	// {{{ public function new()
	/**
	 * コンストラクタ。
	 */
	public function new()
	{
		super();
	}
	// }}}
	// {{{ public function layout( param : ActParameter ) : LinearMovable -> Void
	/**
	 * 直線上に子コンポーネントを並べるアクションです。
	 */
	public function layout( param : ActParameter ) : LinearMovable -> Void
	{
		return function( state : LinearMovable ) : Void {};
	}
	// }}}
	// {{{ public function wipe( ?wipe_interp : LinearMovable -> WipeParameter ) : LinearMovable -> Void
	/**
	 * 直線上を子コンポーネントが重なるように移動するアクションです。
	 */
	public function wipe( ?wipe_interp : LinearMovable -> WipeParameter ) : LinearMovable -> Void
	{
		return function( state : LinearMovable ) : Void {};
	}
	// }}}
	// {{{ public function shuffle( shuffle_interp : LinearMovable -> ShuffleParameter ) : LinearMovable -> Void
	/**
	 * 線分上に子コンポーネントをランダムに並べるアクションです。
	 */
	public function shuffle( shuffle_interp : LinearMovable -> ShuffleParameter ) : LinearMovable -> Void
	{
		return function( state : LinearMovable ) : Void { };
	}
	// }}}
	// {{{ public function fishZoom( time : Float, transition : ActTransition ) : LinearMovable -> Void
	/**
	 * マウスの動きに合わせて魚眼ズームするアクションです。周りの子コンポーネントはつられて押し出されます。
	 */
	public function fishEye( ?fish_interp : LinearMovable -> ActParameter ) : LinearMovable -> Void
	{
		return function( state : LinearMovable ) : Void { };
	}
	// }}}
}
// }}}
